const db = require('../model/db');
const { hashPassword, comparePassword, generateToken } = require('../common/auth');

// 用户注册
const register = (req, res) => {
    const { username, password, email } = req.body;

    // 检查用户名是否已存在
    db.get('SELECT id FROM users WHERE username = ?', [username], (err, user) => {
        if (err) {
            return res.status(500).json({ error: '注册失败' });
        }
        if (user) {
            return res.status(400).json({ error: '用户名已存在' });
        }

        // 加密密码
        hashPassword(password)
            .then(hashedPassword => {
                // 创建新用户，设置默认角色为 admin
                const query = `
                    INSERT INTO users (username, password, email, role)
                    VALUES (?, ?, ?, 'admin')
                `;
                db.run(query, [username, hashedPassword, email], function(err) {
                    if (err) {
                        console.error('创建用户失败:', err);
                        return res.status(500).json({ error: '注册失败' });
                    }

                    // 生成 token
                    const token = generateToken({
                        id: this.lastID,
                        username,
                        role: 'admin'
                    });

                    res.status(201).json({
                        message: '注册成功',
                        token,
                        user: {
                            id: this.lastID,
                            username,
                            email,
                            role: 'admin'
                        }
                    });
                });
            })
            .catch(err => {
                console.error('密码加密失败:', err);
                res.status(500).json({ error: '注册失败' });
            });
    });
};

// 用户登录
const login = async (req, res) => {
    const { username, password } = req.body;

    try {
        db.get('SELECT * FROM users WHERE username = ?', [username], async (err, user) => {
            if (err) {
                return res.status(500).json({ error: '服务器错误' });
            }
            if (!user) {
                return res.status(401).json({ error: '用户名或密码错误' });
            }

            // 验证密码
            const isValid = await comparePassword(password, user.password);
            if (!isValid) {
                return res.status(401).json({ error: '用户名或密码错误' });
            }

            // 生成token
            const token = generateToken(user);
            res.json({
                message: '登录成功',
                token,
                user: {
                    id: user.id,
                    username: user.username,
                    email: user.email,
                    role: user.role
                }
            });
        });
    } catch (error) {
        res.status(500).json({ error: '服务器错误' });
    }
};

// 获取用户信息
const getUserProfile = async (req, res) => {
    try {
        db.get('SELECT id, username, email, role, created_at FROM users WHERE id = ?', 
            [req.user.id], 
            (err, user) => {
                if (err) {
                    return res.status(500).json({ error: '服务器错误' });
                }
                if (!user) {
                    return res.status(404).json({ error: '用户不存在' });
                }
                res.json(user);
            }
        );
    } catch (error) {
        res.status(500).json({ error: '服务器错误' });
    }
};

// 更新用户信息
const updateUserProfile = async (req, res) => {
    const { email, currentPassword, newPassword } = req.body;
    const userId = req.user.id;

    try {
        db.get('SELECT * FROM users WHERE id = ?', [userId], async (err, user) => {
            if (err) {
                return res.status(500).json({ error: '服务器错误' });
            }
            if (!user) {
                return res.status(404).json({ error: '用户不存在' });
            }

            let updates = [];
            let params = [];

            if (email) {
                updates.push('email = ?');
                params.push(email);
            }

            if (currentPassword && newPassword) {
                // 验证当前密码
                const isValid = await comparePassword(currentPassword, user.password);
                if (!isValid) {
                    return res.status(401).json({ error: '当前密码错误' });
                }

                // 加密新密码
                const hashedPassword = await hashPassword(newPassword);
                updates.push('password = ?');
                params.push(hashedPassword);
            }

            if (updates.length === 0) {
                return res.status(400).json({ error: '没有提供要更新的信息' });
            }

            params.push(userId);
            const query = `UPDATE users SET ${updates.join(', ')} WHERE id = ?`;

            db.run(query, params, function(err) {
                if (err) {
                    return res.status(500).json({ error: '更新用户信息失败' });
                }
                res.json({ message: '用户信息更新成功' });
            });
        });
    } catch (error) {
        res.status(500).json({ error: '服务器错误' });
    }
};

module.exports = {
    register,
    login,
    getUserProfile,
    updateUserProfile
}; 